-- 2022-7-25

-- 强制转换类型

--[[
    Lua语言在运行时提供了数值与字符串之间的自动转换。针对字符串的所有算术操作会尝试将字符串转换为数值。

    lua语言不仅仅在算术操作时进行这种强制类型转换，还会在如何需要数值的情况下进行

    相反在需要字符串的地方也会将数组转换为字符串   print(10 .. 11) 注意在第一个参数为数字的时候要以空格隔开避免识别为小数点

    作为原则之一，建议最好不要完全寄希望于自动强制转换类型

    算术运算的规则就是只有在两个操作数都是整型值时结果才是整型。因此，由于字符串不是整型值，所以任何有字符串参与的算术运算结果都是浮点数
        "10" + 1 = 11

    显示转换 字符串 -> 数值 使用函数tonumber
    当能转换时 转换为数字，否则返回nil
    默认情况下转换为十进制，也可以指定进制为由二进制到三十六进制的任意进制转换为10进制
    当转换无效时返回nil
]]

a = "10" + 1
print(a) -- 11
print(type(a)) -- number
print(math.type(a)) -- integer

print(tonumber("10", 2)) -- 2

--[[
    上述的转换总是有效，但是我们需要记住，使用这种转换时，并不能控制输出字符串的格式。
    我们可以用string.format来全面的控制字符串的输出格式

    与算术操作不同的是，比较操作符不会对操作数进行强制转换。
    此外2<15为真 ，但"2"<"15"却为假(字母排序)
    为了避免出现不一致的效果，当比较操作符中混用了字符串和数值时，lua会抛出异常
]]